#pragma once
//#include<iostream>

template<class T>
class auto_ptr
{
public:
	auto_ptr(T*& ptr = nullptr)
		:_ptr(ptr)
	{
		ptr = nullptr;
	}

	auto_ptr(auto_ptr<T>& ptr)
		:_ptr(ptr._ptr)
	{
		ptr._ptr = nullptr;
	}

	T& operator*()
	{
		return *_ptr;
	}

	T* operator->()
	{
		return _ptr;
	}

	auto_ptr<T>& operator=(auto_ptr<T>& ptr)
	{
		_ptr = ptr._ptr;
		ptr._ptr = nullptr;
		return *this;
	}

	void release()
	{
		if (_ptr != nullptr)
		{
			delete _ptr;
		}
	}

	bool operator==(T* ptr)
	{
		return _ptr == ptr;
	}

	~auto_ptr()
	{
		release();
	}

private:
	T* _ptr;
};